package comum.rn;

import java.util.ArrayList;
import java.util.List;

import comum.rn.RNExtremidade;
import comum.rn.RNPeca;

public class RNSequenciaDomino {
	private int pivo;
	private List<RNPeca> pecas;

	public RNSequenciaDomino() {
		setPecas(new ArrayList<RNPeca>());
		setPivo(0);
	}

	public void addPeca(RNPeca peca, RNExtremidade extremidade) {
		if (vazia()) {
			getPecas().add(peca);
			return;
		}
		
		if (extremidade == RNExtremidade.DIREITA) {
			if (getValorExtremidadeDireita() == peca.getLadoDireito()) {
				peca.setInvertida(true);
			} else {
				peca.setInvertida(false);
			}
			getPecas().add(peca);
		} else {
			if (getValorExtremidadeEsquerda() == peca.getLadoEsquerdo()) {
				peca.setInvertida(true);
			} else {
				peca.setInvertida(false);
			}
			getPecas().add(0, peca);
			setPivo(getPivo() + 1);
		}
	}

	public List<RNPeca> getPecas() {
		return pecas;
	}

	public int getPivo() {
		return pivo;
	}

	public boolean vazia() {
		return (getPecas().size() == 0);
	}
	
	public int getValorExtremidadeEsquerda () {
		RNPeca pecaExtremidadeEsquerda = getPecas().get(0);
		if (pecaExtremidadeEsquerda.isInvertida())
			return pecaExtremidadeEsquerda.getLadoDireito();
		else
			return pecaExtremidadeEsquerda.getLadoEsquerdo();
	}
	
	public int getValorExtremidadeDireita () {
		RNPeca pecaExtremidadeDireita = getPecas().get(getPecas().size()-1);
		if (pecaExtremidadeDireita.isInvertida())
			return pecaExtremidadeDireita.getLadoEsquerdo();
		else
			return pecaExtremidadeDireita.getLadoDireito();
	}

	protected void setPivo(int pivo) {
		this.pivo = pivo;
	}

	protected void setPecas(List<RNPeca> pecas) {
		this.pecas = pecas;
	}
}
